home *** CD-ROM | disk | FTP | other *** search
/ Risc World 3 / Risc World 3.iso / SOFTWARE / ISSUE6 / PD / PDF / Stl / h / memory < prev    next >
Text File  |  2003-02-14  |  3KB  |  91 lines

  1. //--------------------------------------------------------------------------
  2. //
  3. //   Copyright (c) 2002, Colin Granville
  4. //
  5. //   All rights reserved.
  6. //
  7. //   Redistribution and use in source and binary forms, with or
  8. //   without modification, are permitted provided that the following 
  9. //   conditions are met:
  10. //
  11. //      * Redistributions of source code must retain the above copyright 
  12. //        notice, this list of conditions and the following disclaimer.
  13. //
  14. //      * Redistributions in binary form must reproduce the above 
  15. //        copyright notice, this list of conditions and the following 
  16. //        disclaimer in the documentation and/or other materials 
  17. //        provided with the distribution.
  18. //
  19. //      * The name Colin Granville may not be used to endorse or promote 
  20. //        products derived from this software without specific prior 
  21. //        written permission.
  22. //
  23. //   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
  24. //   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
  25. //   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
  26. //   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
  27. //   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
  28. //   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  29. //   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
  30. //   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  31. //   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  32. //   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
  33. //   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
  34. //   OF THE POSSIBILITY OF SUCH DAMAGE.
  35. //
  36. //--------------------------------------------------------------------------
  37.  
  38.  
  39. #ifndef stl_memory_h
  40. #define stl_memory_h
  41.  
  42. template<class T>
  43. class auto_ptr
  44. {
  45.   public:
  46.                     
  47.     auto_ptr(T* p=0): ptr(p)                       {}
  48.     ~auto_ptr()                                    {delete ptr;}
  49.  
  50.     T& operator*() const                           {return *ptr;}
  51.     T* operator->() const                          {return ptr;}
  52.     T* get() const                                 {return ptr;}
  53.  
  54.     T* release() const
  55.              {
  56.                T* p=ptr;
  57.                ((auto_ptr<T>*)this)->ptr=0;
  58.                return ptr;
  59.              }
  60.     auto_ptr(const auto_ptr<T>& a)
  61.             {
  62.               ptr=a.ptr;
  63.               ((auto_ptr<T>&)a).ptr=0;
  64.             }
  65.     auto_ptr<T>& operator=(const auto_ptr<T>& rhs) const 
  66.             {
  67.               if (this != &rhs)
  68.               {
  69.                 if (ptr) delete ptr;
  70.                 ((auto_ptr<T>*)this)->ptr=rhs.ptr;
  71.                 ((auto_ptr<T>&)rhs).ptr=0;
  72.               }
  73.               return *((auto_ptr<T>*)this);
  74.             }
  75.  
  76.     T* reset(T* a) const
  77.             {
  78.               if (a != ptr)
  79.               {
  80.                 if (ptr) delete ptr;
  81.                 ((auto_ptr<T>*)this)->ptr=a;
  82.               }
  83.               return ptr;
  84.             }
  85.  
  86.   private:
  87.     T* ptr;
  88. };
  89.  
  90. #endif
  91.